////子类的构造函数和析构函数
//#include <iostream>
//#include <cstring>
//
//using namespace std;
//
//
//class Human {
//public:
//    Human(int age = 0, const char* name = "匿名") : m_age(age), m_name(name) {
//        //在this指针指向的内存空间中，定义m_age,初值为随机数
//        //在this指针指向的内存空间中，定义m_name，利用m_name.string()
//        cout << "Human类的缺省构造函数被调用" << endl;
//
//    }
//
//    Human(const Human& that) : m_age(that.m_age), m_name(that.m_name) {
//        cout << "Human类的拷贝函数被调用" << endl;
//    }
//
//    
//    ~Human() {
//        cout << "Human类的析构函数被调用" << endl;
//    }
//
//    void getInfo() {
//        cout << "姓名" << this->m_name << "年龄:" << this->m_age << endl;
//    }
//
//private:
//    int m_age;//基本类型的成员变量
//    string m_name;//类类型的成员变量
//};
//class Student :public Human {
//public:
//    void getInfo() {
//        Human::getInfo();
//        cout << "成绩" << m_score << ",评价:" << m_remark << endl;
//    }
//    //如果没有定义构造函数，编译器将提供一个无参的构造函数
//    //Student() {
//    //    Human();//定义基类子对象，利用基类子对象.Human()
//    //    float m_score;
//    //    string m_remark;
//    //}
//    Student(int age = 0, const char* name = "匿名", float score = 0.0, const char* remark = "无") 
//        :Human(age,name),m_score(score), m_remark(remark){
//        //定义基类子对象，利用基类子对象.Human()
//        cout << "Student类的缺省构造函数被调用" << endl;
//        }
//    //如果没有定义析构函数，编辑器将提供一个默认的析构函数
//    //~Student() {
//    //    //对于基本类型m_score,什么也不做
//    //    //对于类类型m_remark,利用m_remark.~string(),释放m_remark的各个成员变量所占用的成员空间
//    //    //对于基类子对象，利用基类子对象.~Human(),释放基类子对象的各个成员变量占用的内存空间
//
//    //}//释放m_score/m_remark/基类子对象本身所占用的内存空间
//    ~Student() {
//        cout << "Student类的析构函数被调用" << endl;
//        //    //对于类类型m_remark,利用m_remark.~string(),释放m_remark的各个成员变量所占用的成员空间
//        //对于基类子对象，利用基类子对象.~Human(),释放基类子对象的各个成员变量占用的内存空间
//    }
//    //如果没有定义拷贝构造函数，编译器将提供一个默认的拷贝构造函数
//    //Student(const Student& that) {
//    //    //Human(that);定义基类子对象，利用基类子对象.Human(that)-->调用Human类的拷贝构造函数
//    //    //float m_score = that.m_score;
//    //    //string m_remark = that.m_remark;
//    //}
//    Student(const Student& that):m_score(that.m_score),m_remark(that.m_remark) {
//        //Human(that);定义基类子对象，利用基类子对象.Human(that)-->调用Human类的拷贝构造函数
//        //float m_score = that.m_score;
//        //string m_remark = that.m_remark;
//        cout << "Student类的拷贝构造函数的调用" << endl;
//    }
//    //如果没有定义拷贝赋值函数，编译器将会提供一个默认的拷贝赋值函数
//    //Student& operator=(const Student& that) {
//    //    Human& rh = *this;
//    //    rh = that;//rh.operator=(that)-->调用的是Human类的拷贝赋值函数
//    //    m_score = that.m_score;
//    //    m_remark = that.m_remark;
//    //    return *this;
//    //}
//    Student& operator = (const Student& that) {
//        //编译器不会在定义拷贝赋值函数中添加任何操作
//                Human& rh = *this;
//                rh = that;//rh.operator=(that)-->调用的是Human类的拷贝赋值函数
//                m_score = that.m_score;
//                m_remark = that.m_remark;
//                return *this;
//    }
//private:
//    float m_score;
//    string m_remark;
//};
//int main(void) {
//    cout << "----------s1的创建信息-------" << endl;
//    Student s1(22,"张飞",88.5,"良好");
//    s1.getInfo();
//    cout << "----------s2的创建信息-------" << endl;
//    Student s2(s1);
//    s2.getInfo();
//    cout << "-------------main函数即将结束" << endl;
//    cout << "----------s3的创建信息-------" << endl;
//    Student s3;
//    cout << "s3被赋值前:";
//    s3 = s2;
//    cout << "s3被赋值后:";
//    s3.getInfo();
//    return 0;
//}//s1.~Student() 释放
//
